Last time we determined the makeup of parliament under the three different systems. This time, we’ll reframe these results so we can perform a side-to-side analysis and draw some reasonable inferences. If you’ve skipped to the end1, a reminder that the series is divided into three parts:
1 This is the good bit, though.
- Part One
Will define the question, provide some overview of the different electoral systems, and clean the data. - Part Two
Conduct the analysis, and generate some preliminary results. - Part Three
Refine the analysis, and offer some interpetation.
Due to the presence of list seats in an MMP system, looking at electorates alone elides the comparative advantage of the MMP system. For this reason, I’ve broken this section into two subsections: the first determines the total composition of parliament under each of FPTP, MMP, and STV, whilst the second compares the winners of electorates under FFP and STV.
Composition by Party
compare.parliament = votes %>%
group_by(PartyAb) %>%
filter(CountNumber == 0) %>%
summarise(partyVoteN = sum(prefCount)) %>%
mutate(partyVotePC = (partyVoteN / sum(partyVoteN)) %>%
multiply_by(100) %>%
round(digits = 2)) %>%
# Join to MMP
full_join(mmp %>%
select(PartyAb,
mmpElecSeatsN = seatsElecN,
mmpListSeatsN = seatsListN,
mmpTotSeatsN = seatsTotalN,
mmpTotSeatsPC = seatsTotalPC)) %>%
# Join to STV
full_join(stv %>%
group_by(PartyAb) %>%
summarise(stvSeatsN = n())) %>%
# Join to FPTP
full_join(fptp %>%
group_by(PartyAb) %>%
summarise(fptpSeatsN = n())) %>%
# Tidy up the missing
mutate(across(c(stvSeatsN, fptpSeatsN), ~ ifelse(is.na(.), 0, .)),
stvSeatsPC = (stvSeatsN / sum(stvSeatsN)) %>%
multiply_by(100) %>%
round(digits = 2),
fptpSeatsPC = (fptpSeatsN / sum(fptpSeatsN)) %>%
multiply_by(100) %>%
round(digits = 2)) %>%
# Difference from party vote
mutate(across(ends_with("SeatsPC"), ~ . - partyVotePC, .names = "{.col}_diff"))| Comparison of Parliament Under Three Voting Systems | ||||||||||
| Australian Federal Election 2022 | ||||||||||
| Party | Party Vote (%) | Mixed Member Proportional | Single Transferrable Vote | First Past the Post | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Seats (n) | Seats (%) | Deviance (%) | Seats (n) | Seats (%) | Deviance (%) | Seats (n) | Seats (%) | Deviance (%) | ||
| ALP | 32.58 | 81 | 36.65 | 4.07 | 77 | 50.99 | 18.41 | 71 | 47.02 | 14.44 |
| LP | 23.89 | 59 | 26.70 | 2.81 | 27 | 17.88 | -6.01 | 40 | 26.49 | 2.60 |
| GRN | 12.25 | 31 | 14.03 | 1.78 | 4 | 2.65 | -9.60 | 2 | 1.32 | -10.93 |
| LNP | 8.00 | 23 | 10.41 | 2.41 | 21 | 13.91 | 5.91 | 23 | 15.23 | 7.23 |
| IND | 5.30 | 3 | 1.36 | -3.94 | 10 | 6.62 | 1.32 | 3 | 1.99 | -3.31 |
| ON | 4.96 | 12 | 5.43 | 0.47 | 0 | 0.00 | -4.96 | 0 | 0.00 | -4.96 |
| UAPP | 4.12 | 0 | 0.00 | -4.12 | 0 | 0.00 | -4.12 | 0 | 0.00 | -4.12 |
| NP | 3.60 | 10 | 4.52 | 0.92 | 10 | 6.62 | 3.02 | 10 | 6.62 | 3.02 |
| LDP | 1.73 | 0 | 0.00 | -1.73 | 0 | 0.00 | -1.73 | 0 | 0.00 | -1.73 |
| AJP | 0.60 | 0 | 0.00 | -0.60 | 0 | 0.00 | -0.60 | 0 | 0.00 | -0.60 |
| CYA | 0.39 | 0 | 0.00 | -0.39 | 0 | 0.00 | -0.39 | 0 | 0.00 | -0.39 |
| KAP | 0.38 | 1 | 0.45 | 0.07 | 1 | 0.66 | 0.28 | 1 | 0.66 | 0.28 |
| XEN | 0.25 | 1 | 0.45 | 0.20 | 1 | 0.66 | 0.41 | 1 | 0.66 | 0.41 |
| WAP | 0.23 | 0 | 0.00 | -0.23 | 0 | 0.00 | -0.23 | 0 | 0.00 | -0.23 |
| GAP | 0.21 | 0 | 0.00 | -0.21 | 0 | 0.00 | -0.21 | 0 | 0.00 | -0.21 |
| Deviance is the percentage difference between the proportion of seats held compared to the 1st preference vote. | ||||||||||
| NB: Parties receiving fewer than 30,000 votes are not displayed. | ||||||||||
Composition by Electorates
compare.seat = full_join(
stv %>%
mutate(name = paste(GivenNm, Surname)) %>%
select(StateAb, DivisionNm,
stvID = CandidateID, stvName = name, stvParty = PartyAb, stvCount = prefCount, stvMargin = margin),
fptp %>%
mutate(name = paste(GivenNm, Surname)) %>%
select(StateAb, DivisionNm,
fptpID = CandidateID, fptpName = name, fptpParty = PartyAb, fptpCount = prefCount, fptpMargin = margin),
by = c("StateAb", "DivisionNm")) %>%
mutate(identical = ifelse(stvID == fptpID, TRUE, FALSE)) %>%
select(-c(stvID, fptpID))| Comparison of Electorates with Differing Outcomes Under STV and FPTP | |||||||||
| Australian Federal Election 2022 | |||||||||
| State | Single Transferable Vote | First Past the Post | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Elected Member | Party | Votes (n) | Margin (n) | Elected Member | Party | Votes (n) | Margin (n) | ||
| Bennelong | NSW | Jerome LAXALE | ALP | 50,801.00 | 1,954.00 | Simon KENNEDY | LP | 41,206.00 | 3,610.00 |
| Boothby | SA | Louise MILLER-FROST | ALP | 60,579.00 | 7,451.00 | Rachel SWIFT | LP | 43,196.00 | 6,450.00 |
| Brisbane | QLD | Stephen BATES | GRN | 58,460.00 | 8,122.00 | Trevor EVANS | LNP | 41,032.00 | 11,380.00 |
| Curtin | WA | Kate CHANEY | IND | 53,847.00 | 2,657.00 | Celia HAMMOND | LP | 43,408.00 | 12,466.00 |
| Fowler | NSW | Dai LE | IND | 44,348.00 | 2,793.00 | Kristina KENEALLY | ALP | 30,973.00 | 5,627.00 |
| Gilmore | NSW | Fiona PHILLIPS | ALP | 56,039.00 | 373.00 | Andrew CONSTANCE | LP | 46,941.00 | 6,766.00 |
| Goldstein | VIC | Zoe DANIEL | IND | 51,861.00 | 5,635.00 | Tim WILSON | LP | 39,607.00 | 5,792.00 |
| Higgins | VIC | Michelle ANANDA-RAJAH | ALP | 49,726.00 | 3,941.00 | Katie ALLEN | LP | 38,859.00 | 11,672.00 |
| Kooyong | VIC | Monique RYAN | IND | 54,276.00 | 6,035.00 | Josh FRYDENBERG | LP | 43,736.00 | 2,433.00 |
| Lyons | TAS | Brian MITCHELL | ALP | 37,341.00 | 1,344.00 | Susie BOWER | LP | 27,296.00 | 6,001.00 |
| Mackellar | NSW | Sophie SCAMPS | IND | 51,973.00 | 4,955.00 | Jason FALINSKI | LP | 40,993.00 | 3,269.00 |
| North Sydney | NSW | Kylea Jane TINK | IND | 51,392.00 | 5,666.00 | Trent ZIMMERMAN | LP | 36,956.00 | 12,479.00 |
| Robertson | NSW | Gordon REID | ALP | 50,277.00 | 4,344.00 | Lucy WICKS | LP | 38,448.00 | 2,217.00 |
| Ryan | QLD | Elizabeth WATSON-BROWN | GRN | 52,286.00 | 5,256.00 | Julian SIMMONDS | LNP | 38,239.00 | 8,236.00 |
| Tangney | WA | Sam LIM | ALP | 56,331.00 | 5,114.00 | Ben MORTON | LP | 43,008.00 | 2,068.00 |
| Wentworth | NSW | Allegra SPENDER | IND | 48,186.00 | 7,449.00 | Dave SHARMA | LP | 35,995.00 | 4,185.00 |